home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
qs
/
romahead.s
< prev
next >
Wrap
Text File
|
1995-08-21
|
2KB
|
110 lines
;--------------------------------------------------------------------------------
;RomaHead for ASK3 v1.00 1995.08.21 by M.Kamada
;
; int romahead(char *buffer);
;
; 機能:
; ASK68K version 3.01/3.02 のローマ字変換で、かなに変換されていない
; ローマ字の部分を求めます
;
; 引数:
; buffer ローマ字を格納するバッファへのポインタ
; 念のため16バイト程度確保しておくこと
;
; 返却値:
; 1~ かなに変換されていないローマ字の文字数
; 0 かなに変換されていないローマ字はない
; -1 ASK68K が組み込まれていない
; -2 ASK68K のバージョンが 3.01/3.02 のいずれでもない
; -3 _KNJCTRL のベクタが変更されていて処理できない
;--------------------------------------------------------------------------------
.include doscall.mac
.include iocscall.mac
.text
.xdef _romahead
_romahead:
movea.l 4(sp),a2 ;buffer
movem.l d3-d7/a3-a6,-(sp)
;ASK68Kのバージョンをチェックする
moveq.l #50,d0
move.l d0,-(sp)
DOS _KNJCTRL
addq.l #4,sp
moveq.l #-1,d7
tst.l d0
beq exit ;ASK68Kが組み込まれていない
moveq.l #-2,d7
tst.l d0
bmi exit ;ASK68Kのバージョンが違う
move.w d0,d6 ;d6.w:バージョン(301/302)
sub.w #301,d0
blo exit ;ASK68Kのバージョンが違う
cmp.w #302-301,d0
bhi exit ;ASK68Kのバージョンが違う
lsl.w #2,d0
move.w d0,d5 ;d5.w:バージョン(0/4)
move.w #_KNJCTRL,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
lea.l -$63C(a0),a6 ;a6.l:ASK68Kの先頭
lea.l v1(pc),a0
move.l (a0,d5.w),d0
lea.l (a6,d0.l),a1
IOCS _B_WPEEK
moveq.l #-3,d7
cmp.w d6,d0
bne exit ;ベクタが変更されている
;現在のモードを確認する
lea.l v2(pc),a0
move.l (a0,d5.w),d0
lea.l (a6,d0.l),a1
IOCS _B_WPEEK
move.w d0,d4 ;d4.w:現在のモード
bne mode1
;モード0(FPを起動していないとき)
mode0:
lea.l v3(pc),a0
move.l (a0,d5.w),d0
lea.l (a6,d0.l),a1
IOCS _B_WPEEK
move.w d0,d3 ;ローマ字の文字数
bra getRoma
;モード0以外(FPを起動しているとき)
mode1:
lea.l v4(pc),a0
move.l (a0,d5.w),d0
lea.l (a6,d0.l),a1
IOCS _B_LPEEK
move.l d0,d1
IOCS _B_LPEEK
move.w d0,d3
sub.w d1,d3
lsr.w #1,d3 ;ローマ字の文字数
movea.l d1,a1
;ローマ字を得る
getRoma:
moveq.l #0,d7
move.w d3,d7 ;ローマ字の文字数
beq getRomaEnd
subq.w #1,d3
getRomaLoop:
IOCS _B_WPEEK
move.b d0,(a2)+
dbra d3,getRomaLoop
getRomaEnd:
clr.b (a2)
;終わり
exit:
move.l d7,d0
movem.l (sp)+,d3-d7/a3-a6
rts
v1: .dc.l $DC6A,$DCDE
v2: .dc.l $EB22,$EB96
v3: .dc.l $1477E,$147F2
v4: .dc.l $22C8A,$22CFE